// 轮询分发请求-单独实现
const http = require('http');
const net = require('net');

console.log(`工作进程 ${process.pid} 启动`);

// 创建HTTP服务器
const server = http.createServer((req, res) => {
  const workerId = process.pid;
  
  console.log(`工作进程 ${workerId} 正在处理请求: ${req.url}`);
  
  // 模拟处理时间
  const startTime = Date.now();
  const processingTime = Math.floor(Math.random() * 100); // 降低更多延迟
  
  setTimeout(() => {
    // 生成响应
    res.writeHead(200, { 'Content-Type': 'application/json' });
    
    // 构建响应
    const responseData = {
      message: `Hello from worker ${workerId}`,
      pid: workerId,
      requestUrl: req.url,
      processingTime: processingTime,
      timestamp: new Date().toISOString(),
    };
    
    // 发送响应
    res.end(JSON.stringify(responseData, null, 2));
    
    // 记录处理时间
    const totalTime = Date.now() - startTime;
    console.log(`工作进程 ${workerId} 完成请求处理，耗时: ${totalTime}ms`);
    
    // 通知主进程
    process.send({ 
      type: 'request_completed', 
      data: { 
        url: req.url, 
        processingTime: totalTime
      }
    });
  }, processingTime);
});

// 处理从主进程接收的消息
process.on('message', (message, handle) => {
  if (message === 'connection' && handle) {
    // 确保handle是socket
    if (handle instanceof net.Socket) {
      // 恢复socket数据流
      handle.resume();
      
      // 让server处理这个连接
      server.emit('connection', handle);
      console.log(`工作进程 ${process.pid} 接收到连接并开始处理`);
    }
  }
});

// 通知主进程工作进程已准备好
process.send({ type: 'ready' });

// 添加服务器错误处理
server.on('error', (err) => {
  console.error(`工作进程 ${process.pid} 的HTTP服务器错误:`, err);
});

// 处理未捕获异常
process.on('uncaughtException', (err) => {
  console.error(`工作进程 ${process.pid} 发生未捕获的异常:`, err);
  process.send({ type: 'error', data: { message: err.message, stack: err.stack } });
});